{{> partial_header}}
function Get-FunctionsToExport {
    [CmdletBinding()]
    Param (
        [Parameter(Mandatory = $true, ValueFromPipelineByPropertyName = $true)]
        [ValidateNotNullOrEmpty()]
        [Alias('FullName')]
        $Path
    )

    Process {
        $Token = $null
        $ParserErr = $null

        $Ast = [System.Management.Automation.Language.Parser]::ParseFile(
            $Path,
            [ref]$Token,
            [ref]$ParserErr
        )

        if ($ParserErr) {
            throw $ParserErr
        } else {
            foreach ($name in 'Begin', 'Process', 'End') {
                foreach ($Statement in $Ast."${name}Block".Statements) {
                    if (
                        [String]::IsNullOrWhiteSpace($Statement.Name) -or
                        $Statement.Extent.ToString() -notmatch
                        ('function\W+{0}' -f $Statement.Name)
                    ) {
                        continue
                    }

                    $Statement.Name
                }
            }
        }
    }
}

$ScriptDir = Split-Path $script:MyInvocation.MyCommand.Path
$FunctionPath = 'Api', 'Model', 'Client' | Where-Object {
    Join-Path "$ScriptDir\src\{{{packageName}}}\" $_ | Test-Path
} | ForEach-Object { Join-Path "$ScriptDir\src\{{{packageName}}}\" $_ }

$Manifest = @{
    Path = "$ScriptDir\src\{{{packageName}}}\{{{packageName}}}.psd1"

    Author = '{{{author}}}'
    CompanyName = '{{{companyName}}}'
    Description = '{{{packageName}}} - the PowerShell module for {{{appName}}}'
    {{#tags}}
    Tags = {{{.}}}
    {{/tags}}
    {{#projectUri}}
    ProjectUri = '{{{.}}}'
    {{/projectUri}}
    {{#licenseUri}}
    LicenseUri = '{{{.}}}'
    {{/licenseUri}}
    {{#iconUri}}
    IconUri = '{{{.}}}'
    {{/iconUri}}
    {{#releaseNotes}}
    ReleaseNotes = '{{{.}}}'
    {{/releaseNotes}}

    {{#psData}}
    PrivateData = @{
        PSData = @{
            {{{.}}}
        }
    }

    {{/psData}}
    ModuleVersion = '{{{packageVersion}}}'

    RootModule = '{{{packageName}}}.psm1'
    Guid = '{{packageGuid}}' # Has to be static, otherwise each new build will be considered different module

    PowerShellVersion = '{{{powershellVersion}}}'

    FunctionsToExport = $FunctionPath | Get-ChildItem -Filter *.ps1 | Get-FunctionsToExport

    VariablesToExport = @()
    AliasesToExport = @()
    CmdletsToExport = @()

}

New-ModuleManifest @Manifest
